闲扯
这是一道圆方树好题,只要注意到这道题的性质,就可以轻松做出。
题面
P4630 [APIO2018] Duathlon 铁人两项
Solution
首先,我们需要注意到一个很关键的性质:在一个点双连通分量中,任意两个点 $u,v$ ,它们之间的简单路径至少有一条通过点 $w$ 。其中 $w$ 是该点双连通分量中的一个点。
那么我们构建出圆方树之后,枚举两个点 $s,f$ ,那么可以作为 $c$ 的点为圆方树上 $s$ 到 $f$ 的路径上所有的方点连接的圆点(不包括 $s,f$ )。
然后我们进行一个圆方树的常用技巧:赋值操作。
我们将圆点的权值赋值为 $-1$ ,方点的权值赋值为周围的圆点的个数。
这样,将 $s,f$ 路径上的所有点的点权加起来刚好就是符合要求的 $c$ 的个数。
然后,我们就可以用一个简单的 $dp$ 来计算每个点被经过了多少次。
Code
1 |
|